package com.tcm.day05;

public class Code01_BitMap {

    public static class BitMap {
        long[] bits;

        // 长整型一个数值可以表示64位，当maxVal为0时只需要1个长度...当maxVal为63时只需要1个长度，
        // 当maxVal为64时需要2个长度
        public BitMap(int maxVal) {
            bits = new long[(maxVal + 64) >> 6];
        }

        public void add(int num) {
            // num >> 6表示num/64落在数组哪个下标上
            // num & 63表示num%64，计算出第多少位置为1
            // 1L <<表示1左移到对应的位数，0000xxxx1xxxx0000
            // |=表示对应位置1
            bits[num >> 6] |= 1L << (num & 63);
        }

        public void delete(int num){
            bits[num >> 6] &= ~(1L << (num & 63));
        }

        public boolean contains(int num) {
            return (bits[num >> 6] & (1L << (num & 63))) != 0;
        }
    }

}
